6.3.7 一次获取多篇帖子

根据给定的最大帖子数量,一次从数据库里面获取多篇帖子,是一种非常常见的做法。换句话说,程序可以通过执行以下命令,从数据库里面获取前十篇帖子,并将它们放入到一个切片里面:

posts, _ := Posts(10)

代码清单6-12展示了完成这一操作的 Posts 函数的具体定义。

代码清单6-12 一次获取多篇帖子

func Posts(limit int) (posts []Post, err error) {
  rows, err := Db.Query("select id, content, author from posts limit $1",
  ➥limit)
  if err != nil {
    return
  }
  for rows.Next() {
    post := Post{}
    err = rows.Scan(&post.Id, &post.Content, &post.Author)
    if err != nil {
      return
    }
    posts = append(posts, post)
  }
  rows.Close()
  return
}

Posts 函数使用了 sql.DB 结构的 Query 方法来执行查询,这个方法会返回一个 Rows 接口。 Rows 接口是一个迭代器,程序可以通过重复调用它的 Next 方法来对其进行迭代并获得相应的 sql.Row ;当所有行都被迭代完毕时, Next 方法将返回 io.EOF 作为结果。

Posts 函数在每次进行迭代的时候都会创建一个 Post 结构,并将行包含的数据扫描到结构里面,然后再将这个结构追加到 posts 切片的末尾。当所有行都被迭代完毕之后, Posts 函数就会将这个包含了多个 Post 结构的 posts 切片返回给调用者。

results matching ""

    No results matching ""